// // 导航守卫
// // 导入路由
// import router from '@/router'
// // 导入vuex
// import store from '@/store'
// // 导入进度条插件
// import NProgress from 'nprogress'
// import 'nprogress/nprogress.css'

// // 前置守卫
// // 1. 如果已登录就不能再进入登录页,有些页面需要登录才能进入
// // 2. 限制部分页面需要登录才能进入: 1.使用白名单,2.使用路由元
// // 具体逻辑:
// // 判断是否有token?
// //  有
// //      去的页面是登录页
// //          跳转到首页
// //      去的页面是其他页面
// //          正常进入
// //  没有
// //      去的页面是需要登录的(白名单,纪录需要登录的页面)
// //          跳转到登录页登录
// //      去的页面是不需要登录的
// //          正常进入

// // 设置白名单
// //  纪录不需要登录页面的path(选择纪录少的)
// //  路由元mate
// const pageArr = ['/404', '/login']

// // 设置前置守卫
// router.beforeEach((to, from, next) => {
//   NProgress.start()
//   if (store.getters.token) {
//     // 判断token存在
//     if (to.path.toLowerCase() === '/login') {
//       // 判断进入的页面是否是登录页
//       next('/') // 是的话进入首页
//     } else {
//       next() // 其他页面正常进入
//     }
//   } else {
//     // 不存在
//     // 判断进入的页面在不在白名单内
//     if (pageArr.includes(to.path.toLowerCase())) {
//       // 存在直接进入
//       next()
//     } else {
//       // 不存在需要登录,并设置回跳地址

//       //   next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)
//       next('/login')
//     }
//   }
//   NProgress.done()
// })

// // 后置守卫
// router.afterEach((to, from) => {
//   NProgress.done()
// })

// 导航守卫
import router from '@/router'
import store from '@/store'
import Nprogress from 'nprogress'
import 'nprogress/nprogress.css'

// 前置守卫
const pageArr = ['/404', '/login'] // 记录不需要登录的  // 记录需要登录页面的path （记录不需要登录页面的path） ,选择少的一方
router.beforeEach(async(to, from, next) => {
  // 如果已登录就不能再进登陆页，有些页面需要登录才可进入
  //   限制部分页面需要登录才可访问  1：使用白名单   2：使用路由元
  /*
  判断是否有token
      有token
         去的页面是登录页
             跳转到首页
          不是登录页
             正常进入
      没token
          去的页面需要登录（白名单，记录哪些页面不需要登录）
              跳转到登录页
           去的页面不需要登录
              正常进入

*/
  Nprogress.start()
  if (store.getters.token) {
    if (to.path.toLowerCase() === '/login') {
      next('/')
    } else {
      // 如果有用户信息不用获取，没有才获取
      // 此时出现了一个问题,token存在就代表真的登录了吗,假如token超时了呢,
      // 那么某一些需要登陆的页面也不是可以进入了吗?所以需要在跳入其他页面时进行获取个人用户信息,进行token验证,一举两得
      // 但是又导致了一个问题,如果已经登陆了,并且获取了个人信息,这个时候肯定是已经登录,那么去其他页面还需要重复登录吗?
      // 所以可以再新增一个判断,用户信息不存在才进行接口调用
      if (!store.state.user.userInfo.userId) {
        await store.dispatch('user/getUserInfo')
      }

      // 因为是同步代码,需要保证接口调用完成才进行跳转,所以需要加上async,但是又会出现一个问题,如果接口调用失败,就不会跳转到下一个页面,所以需要在响应拦截中处理token失效问题
      next()
    }
  } else {
    if (pageArr.includes(to.path.toLowerCase())) {
      next()
    } else {
      // 建立 都加上encodeURIComponent ie不支持中文字符
      next(`/login?redirect=${encodeURIComponent(to.fullPath)}`)
    }
  }

  //   next()
  Nprogress.done()
})

// 后置守卫  /home===/home?id=123
router.afterEach((to, from) => {
  Nprogress.done()
})
